export interface TranslationMethod {
  name: string;
  fullName: string;
  type: 'basic' | 'android' | 'i18n' | 'custom' | 'r_string';
}

export interface TranslationContext {
  methodName?: string;
  methodSignature?: string;
  className?: string;
  classType?: 'class' | 'interface' | 'object';
  statement?: string;
}

export interface TranslationOccurrence {
  file: string;
  line: number;
  column: number;
  context: TranslationContext;
  scope: string;
  method: string;
}

// 翻译模块
export interface Translation {
  // 模块id
  id: string;
  // 区分 翻译模块 和 翻译键
  isKey: boolean;
  // 模块名称
  name: string;
  // 模块类型: 通用 , 界面, 组件, 工具, 服务
  type?: 'common' | 'ui' | 'component' | 'tool' | 'service';
  // 模块路径
  path: string;
  // 标签分类
  tags?: string[];
  // 模块描述
  description?: string;
  // 模块注释
  comment?: string;
  // 模块子模块
  subModules: TranslationModule[];
  // 第几级模块
  moduleLevel: number;
  // 模块统计信息
  statistics?: {
    total: number; // 模块内总翻译数
    covered: number; // 已翻译数量
    invalid: number; // 无效翻译数量
    duplicate: number; // 重复翻译数量
    coverageRate: number; // 覆盖率
    qualityScore: number; // 质量分数（0-100）
    childModules: number; // 子模块数量
    depth: number; // 模块深度
  };
}

// 翻译键信息
export interface TranslationInfo {
  // 翻译键信息id
  id: string;
  // 区分 翻译模块 和 翻译键
  isKey: boolean;
  // 第几级模块
  moduleLevel: number;
  // 翻译键名
  key: string;
  // 文件位置信息
  file: string;
  line: number;
  column: number;
  // 翻译上下文描述
  context: string;
  // 所属模块
  module: string;
  // 标签分类
  tags: string[];
  // 使用频率统计
  frequency: number;
  // 节点类型
  node_type: string;
  // 属性名称
  attribute: string;
  // 元素名称
  element: string;
  // 是否已定义
  isDefined: boolean;
  // 多语言翻译内容
  values: Array<{
    language: string;
    value: string;
    status: 'valid' | 'invalid' | 'missing';
  }>;
}

export type TranslationModule = Translation | TranslationInfo;

export interface TranslationStatistics {
  totalKeys: number;
  coveredKeys: number;
  duplicateKeys: number;
  invalidKeys: number;
  coverageRate: number;
  modules: Record<string, number>;
  moduleCoverage: Record<string, number>;
  moduleDetails: Record<
    string,
    {
      total: number;
      covered: number;
      invalid: number;
      duplicate: number;
    }
  >;
  methodUsage: Record<string, number>;
}

// 翻译方法集合
export const TRANSLATION_METHODS: TranslationMethod[] = [
  // 基础方法
  { name: 'string', fullName: 'string', type: 'basic' },
  { name: 'getString', fullName: 'getString', type: 'basic' },
  { name: 'ResourcesUtils.getString', fullName: 'ResourcesUtils.getString', type: 'basic' },

  // Android 资源方法
  { name: 'getString', fullName: 'getResources().getString', type: 'android' },
  { name: 'getString', fullName: 'getContext().getString', type: 'android' },

  // i18n 工具方法
  { name: 'getText', fullName: 'I18nUtil.getText', type: 'i18n' },
  { name: 'getSystemLanguage', fullName: 'LocalManageUtil.getSystemLanguage', type: 'i18n' },

  // 自定义翻译方法
  { name: 'translate', fullName: 'translate', type: 'custom' },
  { name: 'getLocalString', fullName: 'getLocalString', type: 'custom' },

  // R.string 引用方法
  { name: 'string', fullName: 'I18nString.string', type: 'r_string' },
  { name: 'string', fullName: 'string(R.string', type: 'r_string' },
  { name: 'getString', fullName: 'ResourcesUtils.getString(R.string', type: 'r_string' },

  // 新增方法
  { name: 'getText', fullName: 'getText', type: 'basic' },
  { name: 'getStringById', fullName: 'getStringById', type: 'basic' },
  { name: 'getStringByName', fullName: 'getStringByName', type: 'basic' },
  { name: 'getStringResource', fullName: 'getStringResource', type: 'basic' },
];

// 非翻译字符串白名单
export const NON_TRANSLATION_STRINGS = new Set([
  // 技术指标名称
  'MA',
  'BOLL',
  'MACD',
  'KDJ',
  'RSI',
  // 数字格式
  '0.00',
  '0',
  '1',
  '2',
  '3',
  '4',
  '5',
  '6',
  '7',
  '8',
  '9',
  // 常见非翻译字符串
  'activityId',
  'ruleId',
  'cash',
  'labelId',
  'sourceId',
  'sourceTime',
  'financialCash',
  'financingAnnualizedIncome',
  'task',
  // 常见字段名
  'id',
  'name',
  'type',
  'value',
  'key',
  'data',
  'url',
  'path',
  'status',
  'result',
  'success',
  'error',
  'info',
  'time',
  'date',
  // 布尔值
  'true',
  'false',
  // 技术字段
  'null',
  'undefined',
  'NaN',
]);

// Bundle 键值前缀
export const BUNDLE_KEY_PREFIXES = new Set([
  'activity',
  'rule',
  'label',
  'source',
  'financial',
  'task',
  'intent',
  'extra',
  'bundle',
  'param',
  'arg',
  'data',
]);

// 翻译键正则表达式
export const TRANSLATION_KEY_PATTERN = /^[a-z][a-z0-9_]*(_[a-z0-9_]+)*$/i;

// R.string 引用正则表达式
export const R_STRING_PATTERN = /R\.string\.([a-z][a-z0-9_]*(_[a-z0-9_]+)*)/i;
